

using namespace std;

#define MASK 255, 255, 255


// Inicializa el subsistema SDL
void SDL_inicializar(void)
{
       if(SDL_Init(SDL_INIT_VIDEO)!=0)
       {
         cout<<"Error al inicializar SDL"<<SDL_GetError()<<endl;
         exit(1);
       }
}


SDL_Surface * SDL_cargar_imagen(char *imagen)
{
     SDL_Surface *presentacion;

     presentacion = IMG_Load(imagen);
     if(presentacion == NULL)
     {
         cout<<"No se ha podido cargar la imagen: "<<imagen<<endl;
         exit(1);
     }

     return presentacion;
}


// retorna un framebuffer
SDL_Surface * SDL_inicializar_modo_video(int ancho, int alto, int bpp)
{
      SDL_Surface *pantalla;
      pantalla = SDL_SetVideoMode(ancho, alto, bpp, SDL_HWSURFACE | SDL_DOUBLEBUF); 

      if (pantalla == NULL) 
      { 
         cout<<"Error modo de video"<< SDL_GetError()<<endl; 
         exit(1); 
      }
    
      return pantalla;
}


SDL_Rect SDL_dibujar_imagen_src(SDL_Surface * imagen,int x,int y)
{

   
        SDL_Rect src;

        src.x = x;    // coordenadas x e inicio
        src.y = y;    // coordenadas y de inicio
        src.w = imagen -> w;   // ancho de la imagen de inicio
        src.h = imagen -> h;   // alto de la imagen  de inicio
     return src;

}

SDL_Rect SDL_dibujar_imagen_dest(SDL_Surface * imagen,int x,int y)
{
     SDL_Rect dest;

     dest.x = x; // coordenadas x de fin
     dest.y = y; // coordenadas y de fin
     dest.w = imagen -> w; // ancho de la imagen de fin
     dest.h = imagen -> h;  // alto de la imagen de fin


     return dest;

}


void cargarYFormatearImagen(SDL_Surface **img, const char *path) {

	SDL_Surface *tmp = SDL_LoadBMP(path); /* Cargo en memoria la imagen fondo */
	if(tmp == NULL) {
		fprintf(stderr, "Error: %s\n", SDL_GetError());
	}
	int value = SDL_SetColorKey(tmp, SDL_SRCCOLORKEY | SDL_RLEACCEL, SDL_MapRGB(tmp->format, MASK)); /* Establesco Transparencia */
	if(value != 0) {
		fprintf(stderr, "Error: %s\n", SDL_GetError());
	}
	*img = SDL_DisplayFormat(tmp);
}
